package com.gengzp.common.exception;

import lombok.Getter;

import static com.gengzp.common.constants.ExceptionCodeConstants.COMMON_ERROR;

/**
 * @ClassName BusinessException
 * @Description 业务异常
 * @Author gengzp
 * @Date 2025/5/11 2:12
 */
@Getter
public class BusinessException extends RuntimeException {

    /**
     * 异常对应的错误码，方便前端或调用者根据错误码来区分不同类型的业务异常
     */
    private final int code;

    /**
     * 私有化构造方法，不允许外部直接实例化
     */
    private BusinessException(int code, String message) {
        super(message);
        this.code = code;
    }

    /**
     * 使用默认的通用错误码抛出异常，可传入具体的错误消息
     *
     * @param message 异常对应的详细错误消息
     * @return 构建好的BusinessException实例（实际上是直接抛出异常，返回类型只是为了语法上的统一）
     */
    public static BusinessException get(String message) {
        return get(COMMON_ERROR, message);
    }

    /**
     * 根据传入的错误码和错误消息抛出异常
     *
     * @param code    异常对应的错误码
     * @param message 异常对应的详细错误消息
     * @return 构建好的BusinessException实例（实际上是直接抛出异常，返回类型只是为了语法上的统一）
     */
    public static BusinessException get(int code, String message) {
        return new BusinessException(code, message);
    }

}
